home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Original Shareware 1.1
/
The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso
/
6
/
cmerge.zip
/
SIEVE.LSL
< prev
next >
Wrap
Text File
|
1987-06-08
|
9KB
|
249 lines
Cmerge V1.0 Mon Jun 08 14:31:24 1987 Page 1-1
.186
name sieve
0000 _text segment byte public 'code'
dgroup group _data,_bss
assume cs:_text,ds:dgroup,ss:dgroup
0000 _text ends
0000 _data segment word public 'data'
0000 _d@ label byte
0000 _data ends
0000 _bss segment word public 'bss'
0000 _b@ label byte
0000 _bss ends
0000 _data segment word public 'data'
public _flags
0000 _flags label byte
0000 00 db 0
0001 1FFE[ db 8190 dup (?)
??
]
1FFF _data ends
0000 _text segment byte public 'code'
;|***
;|*** /* Eratosthenes Sieve Prime Number Program in C, Byte January 1983.
;|*** * The code has been corrected to produce primes correctly.
;|*** */
;|*** #include <stdio.h>
;|***
;|*** #define TRUE 1
;|*** #define FALSE 0
;|*** #define NITER 150
;|*** #define SIZE 8190
;|***
;|*** char flags[SIZE+1]={0};
;|***
;|***
;|*** main ()
;|*** {
; Line 16
0000 _main proc near
0000 56 push si
0001 57 push di
0002 C8 0004 00 enter 4,0
;|*** register int i,k;
; Line 17
;|*** int iter, count;
; Line 18
;|***
; Line 19
;|*** printf ("%d iterations: ", NITER);
; Line 20
0006 68 db 104 ; push immediate
0007 0096 dw 150
0009 B8 1FFF R mov ax,offset _s@
000C 50 push ax
000D E8 0000 E call near ptr _printf
0010 83 C4 04 add sp,4
;|***
; Line 21
Cmerge V1.0 Mon Jun 08 14:31:25 1987 Page 1-2
;|*** for( iter = 1; iter <= NITER; iter++ ) /* Do sieve 150 times */
; Line 22
0013 C7 46 FC 0001 mov word ptr [bp-4],1
0018 EB 41 jmp short @5
001A @4:
;|*** {
; Line 23
;|*** count = 0;
; Line 24
001A C7 46 FE 0000 mov word ptr [bp-2],0
;|*** for( i = 0; i <= SIZE; i++) /* set all flags true */
; Line 25
001F 33 F6 xor si,si
0021 EB 06 jmp short @9
0023 @8:
;|*** flags[i] = TRUE;
; Line 26
0023 C6 84 0000 R 01 mov byte ptr dgroup:_flags[si],1
0028 46 inc si
0029 @9:
0029 81 FE 1FFE cmp si,8190
002D 7E F4 jle @8
;|***
; Line 27
;|*** for( i = 2; i <= SIZE; i++ )
; Line 28
002F BE 0002 mov si,2
0032 EB 1E jmp short @13
0034 @12:
;|*** {
; Line 29
;|*** if ( flags[i] ) /* found a prime */
; Line 30
0034 80 BC 0000 R 00 cmp byte ptr dgroup:_flags[si],0
0039 74 16 je @11
;|*** {
; Line 31
;|*** for ( k = i + i; k <= SIZE; k += i )
; Line 32
003B 8B FE mov di,si
003D 03 FE add di,si
003F EB 07 jmp short @18
0041 @17:
;|*** flags[k] = FALSE; /* Cancel its multiples */
; Line 33
0041 C6 85 0000 R 00 mov byte ptr dgroup:_flags[di],0
0046 03 FE add di,si
0048 @18:
0048 81 FF 1FFE cmp di,8190
004C 7E F3 jle @17
;|*** count++;
; Line 34
004E FF 46 FE inc word ptr [bp-2]
;|*** }
; Line 35
;|*** }
; Line 36
Cmerge V1.0 Mon Jun 08 14:31:25 1987 Page 1-3
0051 @11:
0051 46 inc si
0052 @13:
0052 81 FE 1FFE cmp si,8190
0056 7E DC jle @12
;|*** }
; Line 37
0058 FF 46 FC inc word ptr [bp-4]
005B @5:
005B 81 7E FC 0096 cmp word ptr [bp-4],150
0060 7E B8 jle @4
;|***
; Line 38
;|*** printf ("%d primes\n", count);
; Line 39
0062 FF 76 FE push word ptr [bp-2]
0065 B8 200F R mov ax,offset _s@+16
0068 50 push ax
0069 E8 0000 E call near ptr _printf
006C 83 C4 04 add sp,4
;|***
; Line 40
;|*** exit(0);
; Line 41
006F 6A db 106 ; push immediate
0070 00 db 0
0071 E8 0000 E call near ptr _exit
0074 44 inc sp
0075 44 inc sp
;|***
; Line 42
;|*** }
; Line 43
0076 C9 leave
0077 5F pop di
0078 5E pop si
0079 C3 ret
_main endp
007A _text ends
1FFF _data segment word public 'data'
1FFF _s@ label byte
1FFF 25 db 37
2000 64 db 100
2001 20 db 32
2002 69 db 105
2003 74 db 116
2004 65 db 101
2005 72 db 114
2006 61 db 97
2007 74 db 116
2008 69 db 105
2009 6F db 111
200A 6E db 110
200B 73 db 115
200C 3A db 58
200D 20 db 32
200E 00 db 0
Cmerge V1.0 Mon Jun 08 14:31:25 1987 Page 1-4
200F 25 db 37
2010 64 db 100
2011 20 db 32
2012 70 db 112
2013 72 db 114
2014 69 db 105
2015 6D db 109
2016 65 db 101
2017 73 db 115
2018 0A db 10
2019 00 db 0
201A _data ends
007A _text segment byte public 'code'
extrn _exit:near
extrn _printf:near
public _main
007A _text ends
end
Symbols-1
Segments and Groups:
N a m e Size Align Combine Class
DGROUP . . . . . . . . . . . . . GROUP
_DATA . . . . . . . . . . . . 201A WORD PUBLIC 'DATA'
_BSS . . . . . . . . . . . . . 0000 WORD PUBLIC 'BSS'
_TEXT . . . . . . . . . . . . . 007A BYTE PUBLIC 'CODE'
Symbols:
N a m e Type Value Attr
@11 . . . . . . . . . . . . . . L NEAR 0051 _TEXT
@12 . . . . . . . . . . . . . . L NEAR 0034 _TEXT
@13 . . . . . . . . . . . . . . L NEAR 0052 _TEXT
@17 . . . . . . . . . . . . . . L NEAR 0041 _TEXT
@18 . . . . . . . . . . . . . . L NEAR 0048 _TEXT
@4 . . . . . . . . . . . . . . . L NEAR 001A _TEXT
@5 . . . . . . . . . . . . . . . L NEAR 005B _TEXT
@8 . . . . . . . . . . . . . . . L NEAR 0023 _TEXT
@9 . . . . . . . . . . . . . . . L NEAR 0029 _TEXT
_B@ . . . . . . . . . . . . . . L BYTE 0000 _BSS
_D@ . . . . . . . . . . . . . . L BYTE 0000 _DATA
_EXIT . . . . . . . . . . . . . L NEAR 0000 _TEXT External
_FLAGS . . . . . . . . . . . . . L BYTE 0000 _DATA Global
_MAIN . . . . . . . . . . . . . N PROC 0000 _TEXT Global Length = 007A
_PRINTF . . . . . . . . . . . . L NEAR 0000 _TEXT External
_S@ . . . . . . . . . . . . . . L BYTE 1FFF _DATA
145 Source Lines
145 Total Lines
44 Symbols
49228 Bytes symbol space free
0 Warning Errors
Cmerge V1.0 Mon Jun 08 14:31:25 1987 Page 1-5
0 Severe Errors